// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright (c) 2023 Yevhen Babiichuk (DustDFG)

#ifndef _DOT_SORT_VIEW_ITUBE_HPP_
#define _DOT_SORT_VIEW_ITUBE_HPP_

#include <cstdint>
#include <vector>
#include <optional>

namespace View
{

class ITube
{
	protected:
		ITube(uint8_t size);

		const uint8_t size;

		virtual void fillSlotDot(uint8_t slotIndex, std::optional<uint8_t> dot) = 0;
		virtual void fillSlotTubePart(uint8_t slotIndex, uint8_t partIndex) = 0;
		virtual void fillSlotSelectedTubePart(uint8_t slotIndex, uint8_t partIndex) = 0;

	public:
		virtual ~ITube() = default;

		void fillSlotsDots(const std::vector<uint8_t>& dots);
		void fillSlotsTube();
		void fillSlotsSelectedTube();
};

}

#endif
